package com.xb.loan.account.service;


import com.xb.loan.account.service.bean.PointBillVO;
import com.xb.loan.account.service.bean.PointInfoVO;
import com.xb.loan.log.exception.BizException;
import com.xb.loan.usercenter.service.user.bean.UserInfoVO;

import java.util.List;

/**
 *
 * 类  描  述 : 用户账户积分接口服务
 */
public interface IPointService {
    /**
     * 
     * 创建用户积分账户
     * @param pivo 积分账户信息
     * @return
     */
    public int createPointInfo(PointInfoVO pivo) throws BizException;
    /**
     * 查询用户积分账户
     * @param accountId 账户ID
     * @return
     */
    public PointInfoVO queryPointInfoById(String accountId) throws BizException;
    
    /**
     * 查询用户积分账户
     * @param userId 用户ID
     */
    public PointInfoVO queryPointInfoByUserId(String userId) throws BizException;
    
    /**
     * 
     * 积分账户账务查询记录
     * @param userId      用户ID
     * @param feeType     付费类型
     * @param billType    记账类型（编码）
     * @param startDate   起始日期
     * @param endDate     截止日期
     * @param pageNum     页数
     * @param numPerPage  第页显示记录条数
     * @return
     * @throws BizException
     * 2015年9月9日 by zhangyi
     */
    public List<PointBillVO> queryPointBill(String userId, Integer feeType, Integer billType,
                                            String startDate, String endDate, int pageNum, int numPerPage) throws BizException;

    /**
     *
     * 积分账户账务查询记录总条数
     * @param userId      用户ID
     * @param feeType     付费类型
     * @param billType    记账类型（编码）
     * @param startDate   起始日期
     * @param endDate     截止日期
     * @return      返回查询条件下的总记录
     * @throws BizException
     */
    public int queryPointBillCount(String userId, Integer feeType, Integer billType,
                                   String startDate, String endDate) throws BizException;

    /**
     *
     * 修改积分账户信息
     *          accountId   账户信息ID
     *          partnerId   渠道ID
     *          status  账户状态
     * @return      返回更新条数
     * @throws BizException
     */
    public int updatePointInfo(String accountId, String partnerId, Integer status) throws BizException;

    /**
     * 加积分
     * @param foreignId     记账来源订单ID
     * @param userInfoVO    用户信息对象
     * @param point         指定积分
     * @param billType      记账类型
     * @param accountPeriod 账期
     * @throws BizException
     */
    public void addPoint(String foreignId, UserInfoVO userInfoVO, int point, int billType, String accountPeriod)
            throws BizException;

    /**
     * 扣积分
     * @param foreignId     记账来源订单ID
     * @param userInfoVO    用户信息对象
     * @param point         指定积分
     * @param billType      记账类型
     * @param accountPeriod 账期
     * @return      
     * @throws BizException
     */
    public void deductPoint(String foreignId, UserInfoVO userInfoVO, int point, int billType, String accountPeriod)
            throws BizException;
    
    /**
	 * 冲正接口
	 * @param userId 用户ID
	 * @param foreignId 记账来源订单ID
	 * @param billType 记账类型
	 */
	public void flushes(String userId, String foreignId, int billType) throws BizException;
}
